virtual dom vs shadow dom